ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース7.0
E05164-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

ttXlaColDesc_t

列情報は、ttXlaColDesc_t構造体を使用して提供されます。この構造体は、ttXlaGetColumnInfo関数によって返されます。

この構造体には、次のフィールドが含まれています。

フィールド
説明

header

標準データ・ヘッダー。

colName[tt_NameLenMax]

char
列の名前。

pad0

SQLUINTEGER
4バイト境界まで埋め込みます。

sysColNum

SQLUINTEGER
列番号(1から始まります)。

userColNum

SQLUINTEGER
ユーザー割当ての列番号。

dataType

SQLUINTEGER
ODBC TTXLA_*コードの構造体。
表3.1を参照してください。

size

SQLUINTEGER
列の最大サイズまたは基本サイズ。

offset

SQLUINTEGER
列の固定長部分に対するオフセット。

nullOffset

SQLUINTEGER
NULLバイトに対するオフセット(NULL値可能でない場合は0(ゼロ)です)。

precision

SQLSMALLINT
DECIMAL型の数値の精度。

scale

SQLSMALLINT
DECIMAL型の数値のスケール。

flags

SQLUINTEGER
列フラグ。
  • TT_COLPRIMKEY: 列は主キーです。
  • TT_COLVARYING: 列はアウトラインで格納されています。
  • TT_COLNULLABLE: 列はNULL値可能です。
  • TT_COLUNIQUE: 列に一意の属性が定義されています。

ttXlaColDesc_t構造体を取得する手順およびその内容を確認する手順は、「列データの確認」を参照してください。次に、これらの手順の概要を示します。

ttXlaColDesc_t構造体は、ttXlaGetColumnInfo関数によって返されます。この構造体には、特定の表の列情報にアクセスするために必要なメタデータが格納されています。たとえば、offsetフィールドを使用すると、ttXlaUpdateDesc_t構造体の後の更新レコードに返された行(一行または複数行)の特定の列データを検出できます。列値のアドレスは、返された行のアドレスにoffsetを追加して検出することができます。その後、dataTypeフィールドに基づいてこの値を対応するC型にキャストしたり、「複合データ型の変換」で説明されている変換ルーチンの1つに渡すことができます。

TimesTenの行データは、固定長データおよびその後に続く可変長データで構成されます。

NULL値が含まれる可能性がある列の場合、nullOffset はレコードのNULLバイトを指します。この値は、列がNULLの場合は1、NULLでない場合は0(ゼロ)になります。詳細は、「NULL値の検出」を参照してください。

flagsビットは、列がNULL値可能であるかどうか、主キーの一部となるかどうか、またはアウトラインで格納されるかどうかを定義します。

sysColNum値は、列に割り当てるシステム列番号です。この値は、最初の列に対しては1から始まります。

固定長列データの場合、列のアドレスは、ttXlaColDesc_t構造体のoffset値に行のアドレスを追加したものです。

ttXlaColDesc_t colDesc;

void* pColVal = colDesc->offset + row;

列の値は、データ型に対応する型ポインタを使用してこのポインタを参照解除すると取得できます。たとえば、SQL_INTEGERの場合、ODBC型はSQLINTEGERであるため、列の値は次のように入力すると取得できます。

*((SQLINTEGER*) pColVal))

可変長列データの場合、前述の手順で計算されたpColValは4バイトのオフセット値のアドレスになります。このオフセット値をpColValのアドレスに追加すると、可変長列データの先頭を指すポインタが示されます。64ビットのプラットフォームで処理が行われると想定すると、この場所の最初の8バイトはこのデータの長さ(var_len)で、その後に実際のデータ(var_data)が続きます。

この例では、VARCHAR文字列をコピーおよび出力します。

tt_ptrint* var_len = (tt_ptrint*)((char*)pColVal +

*((int*)pColVal));

char* var_data = (char*)(var_len+1);

char *buffer = malloc(*var_len+1);

memcpy(buffer,var_data,*var_len);

buffer[*var_len] = (char)NULL; /* NULL terminate the string */

printf("%s\n",buffer);

free(buffer);